<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //promise 的静态方法:
        //1.Promise.resolve() : 快速创建一个  成功状态的promise对象
        // let p = new Promise(resolve=>{
        //     resolve("success");
        // });
        // console.log(p);// Promise {<fulfilled>: 'success'}

        // let p = Promise.resolve("success");
        // console.log(p);// Promise {<fulfilled>: 'success'}

        //2.Promise.reject(); 快速创建一个失败状态的promise对象
        // let p = new Promise((resolve, reject) => {
        //     reject("error")
        // })
        // console.log(p);// Promise {<rejected>: 'error'}

        // let p = Promise.reject("error");
        // console.log(p);// Promise {<rejected>: 'error'}

        // 3.Promise.race(); 执行多个promise对象,获取执行快的promise对象的结果:
        // let p1 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(111);
        //     }, 2000);
        // })
        // let p2 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         reject(222)
        //     }, 1000);
        // })
        // let p3 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(333)
        //     }, 3000);
        // })

        //即使得到的值是失败的状态值,但是执行是成功的,不在乎是否失败状态
        // Promise.race([p1, p2, p3]).then(res => {
        //     console.log(res);
        // }, err => {
        //     console.log("error", err);
        // })// error 222


        //4.Promise.all(); 可以执行多个promise对象,可以收集所有的promise对象的结果,必须所有的promise对象都是fulfilled状态
        // let p1 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(111)
        //     }, 2000);
        // })
        // let p2 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(222)
        //         // reject(222)
        //     }, 1000);
        // })
        // let p3 = new Promise((resolve,reject)=>{
        //     setTimeout(() => {
        //         resolve(333) 
        //     }, 3000);
        // })
        // Promise.all([p1,p2,p3]).then(res=>console.log(res));//  [111, 222, 333]


        //5.Promise.allSettled(); 可以执行多个promise对象,可以获取 所有的promise对象成功或者失败的结果
        let p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(111)
            }, 2000);
        })

        let p2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                reject(222);
            }, 1000);
        });

        let p3 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(333);
            }, 3000);
        });

        
        // 同时执行 多个异步 promise，不是依次执行
        Promise.allSettled([p1, p2, p3]).then(res => console.log(res));
        /* 
        0: {status: 'fulfilled', value: 111}
        1: {status: 'rejected', reason: 222}
        2: {status: 'fulfilled', value: 333}
        */
    </script>
</body>

</html>